package com.ziyueyuwen.xiniao.service.baseservice.product;

import com.ziyueyuwen.xiniao.bean.ZyProductInfo;
import com.ziyueyuwen.xiniao.bean.product.*;
import com.ziyueyuwen.xiniao.enums.GradeEnum;
import com.ziyueyuwen.xiniao.enums.ProductClassRuleEnum;
import com.ziyueyuwen.xiniao.enums.ProductPeriodEnum;

import java.util.List;

/**
 * @author wancheng  on 2019/2/20.
 */
public interface ProductInfoBaseService {
    /**
     * 通过id获取
     * @param id
     * @return
     */
    ZyProductInfo selectByPreKey(Integer id);

    /**
     * 通过参数获取
     * @param param
     * @return
     */
    ZyProductInfo selectOneByZyCommodityInfo(ZyProductInfo param);

    /**
     * 通过班级
     * @param classId
     * @return
     */
    ZyProductInfo selectOneByClassId(Integer classId);

    /**
     * 查询多个
     * @param param
     * @return
     */
    List<ZyProductInfo> selectListByZyCommodityInfo(ZyProductInfo param);

    /**
     * 查询所有商品
     * @return
     */
    List<ZyProductInfo> selectAll();

    /**
     * 保存
     * @param product
     */
    void save(ZyProductInfo product);

    /**
     * 保存
     * @param product
     */
    void saveSelective(ZyProductInfo product);

    /**
     * 批量保存
     * @param products
     */
    void saveBatch(List<ZyProductInfo> products);

    /**
     * 修改
     * @param product
     */
    void update(ZyProductInfo product);

    /**
     * 删除
     * @param id
     */
    void deleteByPreKey(Integer id);

    /**
     * 删除
     * @param product
     */
    void delete(ZyProductInfo product);

    /**
     * 获取商品和班级的上课时间
     * @param productId
     * @return
     */
    ProductVO selectProductAndStageByProductId(Integer productId);


    /**
     * pc端商品列表查询
     * @param productName
     * @param className
     * @return
     */
    List<ProductListVO> getProductListForPc(String productName, String className);

    /**
     * pc端商品列表查询
     * @param productName
     * @param className
     * @param courseName
     * @param ifUpperShelf
     * @return
     */
    List<ProductListVO> getProductListForPc(String productName, String className,String courseName,Boolean ifUpperShelf);


    /**
     * 获取上架商品的年级
     * @return
     */
    List<GradeEnum> getUpperProductGrade();

    /**
     * 获取上架商品的上课规则
     * @param courseId
     * @return
     */
    List<ProductClassRuleEnum> getUpperProductClassRule(Integer courseId);

    /**
     * 获取上架商品的上课时间段
     * @param courseId
     * @param stageId
     * @param classRule
     * @return
     */
    List<ZyProductInfo> getUpperProductPeriod(Integer courseId,Integer stageId,ProductClassRuleEnum classRule);

    /**
     * 获取商品的课程信息分组
     * @param gradeEnum
     * @return
     */
    List<SaleCourseVO> getProductCourseInfo(GradeEnum gradeEnum);

    /**
     * 在售课程内老师是否有在售课程详情
     * @param courseId
     * @return
     */
    List<SaleTeacherStatus> productTeacherStatus(Integer courseId);

    /**
     * 销售查看详情
     * @param query
     * @return
     */
    List<SaleCourseDetailsVO> getSaleCourseDetails(SaleCourseDetailsQuery query);

    /**
     * 在售课程剩余人数
     * @param courseId
     * @return
     */
    Integer getStudentAvailable(Integer courseId);
}
